package medium;

/**
 * 1673. 找出最具竞争力的子序列
 * 创建时间：2024-05-24 11:49
 */
public class 找出最具竞争力的子序列_1673 {

    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.mostCompetitive(new int[]{2,4,3,3,5,4,9,6}, 4));
    }
}

/**
 * 给你一个整数数组 nums 和一个正整数 k ，返回长度为 k 且最具 竞争力 的 nums 子序列。
 *
 * 数组的子序列是从数组中删除一些元素（可能不删除元素）得到的序列。
 *
 * 在子序列 a 和子序列 b 第一个不相同的位置上，如果 a 中的数字小于 b 中对应的数字，那么我们称子序列 a 比子序列 b（相同长度下）更具 竞争力 。
 *
 * 例如，[1,3,4] 比 [1,3,5] 更具竞争力，在第一个不相同的位置，也就是最后一个位置上， 4 小于 5 。
 */
class Solution {
    public int[] mostCompetitive(int[] nums, int k) {
        int[] ans = new int[k];
        int index = 0, n = nums.length;
        for (int i = 0; i < n; i++) {
            while (index > 0 && ans[index - 1] > nums[i] && k - index < n - i) {
                index--;
            }
            if (index < k) {
                ans[index++] = nums[i];
            }
        }
        return ans;
    }
}
